<?php

/**
 * gmstrftime
 * 将秒数转换成时分秒
 * 传入总的秒数，获得它的时长hh:mm:ss
 *
 */
function changeTimeType($seconds) { 
    if ($seconds > 3600) { 
        $hours = intval($seconds / 3600); 
        $minutes = $seconds % 3600; 
        $time = $hours . ":" . gmstrftime('%M:%S', $minutes); 
    } else { 
        $time = gmstrftime('%H:%M:%S', $seconds); 
    } 
    return $time; 
}

/**
 * gmstrftime
 * 将秒数转换成天时分秒
 * 返回结果简称
 * %j - 一年中的第几天（001 到 366）
 * %H - 小时，使用 24 小时制（00 到 23）
 * %M - 分
 * %S - 秒
 * @param $seconds
 * @return string
 */
function time2second($seconds){
    $seconds = (int)$seconds;
    if( $seconds<86400 ){//如果不到一天
        $format_time = gmstrftime('%H时%M分%S秒', $seconds);
    }else{
        $time = explode(' ', gmstrftime('%j %H %M %S', $seconds));//Array ( [0] => 04 [1] => 14 [2] => 14 [3] => 35 )
        //gmstrftime返回的字符串用空格进行隔开,将以''分割的合并成数组。只所以这样做是因为一天有余按两天算例子:86404 一天4秒。天数显示第二天这里减去一天
        $format_time = ($time[0]-1).'天'.$time[1].'时'.$time[2].'分'.$time[3].'秒';
    }
    return $format_time;
}

/**
 * 将秒数转换成天时分秒更细致的算法,手动算出天数拼接时间
 * @param $seconds
 * @return string
 */
function timetosecond($seconds){
    $seconds = (int)$seconds;
    if( $seconds>3600 ){  //超过一个小时
        if( $seconds>24*3600 ){ //超过一天
            $days		= (int)($seconds/86400);//得到天数
            $days_num	= $days."天";
            $seconds	= $seconds%86400;//取余剩下的秒数
        }
        $hours = intval($seconds/3600);
        $minutes = $seconds%3600;//取余下秒数
        $time = $days_num.$hours."小时".gmstrftime('%M分钟%S秒', $minutes);
    }else{
        $time = gmstrftime('%H小时%M分钟%S秒', $seconds);
    }
    return $time;
}

/**
 * 给定日期"2018-12-02" 得到当月第一天和最后一天
 * @param $date
 * @return array
 */
function getthemonth($date){
    $firstday = date('Y-m-01', strtotime($date));
    $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
    return array($firstday,$lastday);
}


/**
 * 该操作是多久之前操作的
 * @param $time 过去时间段的时间戳
 * @return false|string ?秒前|?分钟前|今天?:?|昨天?:?|今天?:?|昨天？：？|时间过期了
 */
function getLastTimeFormt($time){

    $agoTime = time() - $time;
    if ( $agoTime <= 60&&$agoTime >=0 ) {
        return $agoTime.'秒前';
    }elseif( $agoTime <= 3600 && $agoTime > 60 ){  //秒在分区间
        return intval($agoTime/60) .'分钟前';  //将秒转成分
    }elseif ($agoTime <= 86400 && $agoTime > 3600){
        return '今天 '.date('H:i',$time);
    }elseif( $agoTime>86400 &&$agoTime < 172800){
        return '昨天 '.date('H:i',$time);
    }else{
        return '时间过期了';
    }

}

changeTimeType($seconds); //将秒数转换成时分秒
time2second($seconds);    //将秒数转换成天时分秒
timetosecond($seconds);   //将秒数转换成天时分秒更细致的算法
getthemonth($date);       //获取某月的第一天和最后一天
getLastTimeFormt($time);  //给定过去某个时间戳,得到他是多少秒多少分钟之前的时间段